GtkWidget: Create GtkCssProvider for user modifications.
authorCarlos Garnacho <carlosg@gnome.org>
Sun, 11 Apr 2010 21:30:49 +0000 (23:30 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Sat, 4 Dec 2010 14:37:03 +0000 (15:37 +0100)
~/.gtk-X.0.css is checked, and added as a style resource if available.

gtk/gtkwidget.c

index 366f9122441b9e251bd35c15ecd1708d524fe951..3d4d7cc6b7246275e8e3c403b9bfb69d40bd0b16 100644 (file)
@@ -59,6 +59,8 @@
 #include "gtkbuilderprivate.h"
 #include "gtksizerequest.h"
 #include "gtkstylecontext.h"
+#include "gtkcssprovider.h"
+#include "gtkversion.h"
 #include "gtkdebug.h"
 
 
@@ -13210,10 +13212,35 @@ gtk_widget_get_style_context (GtkWidget *widget)
 
   if (G_UNLIKELY (!context))
     {
+      static GtkCssProvider *css_provider = NULL;
+
       context = g_object_new (GTK_TYPE_STYLE_CONTEXT, NULL);
       g_object_set_qdata_full (G_OBJECT (widget),
                                quark_style_context, context,
                                (GDestroyNotify) g_object_unref);
+
+      /* Add provider for user file */
+      if (G_UNLIKELY (!css_provider))
+        {
+          GFile *home_dir, *css_file;
+          gchar *filename;
+
+          css_provider = gtk_css_provider_new ();
+          home_dir = g_file_new_for_path (g_get_home_dir ());
+
+          filename = g_strdup_printf (".gtk-%d.0.css", GTK_MAJOR_VERSION);
+          css_file = g_file_get_child (home_dir, filename);
+          g_free (filename);
+
+          if (g_file_query_exists (css_file, NULL))
+            gtk_css_provider_load_from_file (css_provider, css_file, NULL);
+
+          g_object_unref (home_dir);
+          g_object_unref (css_file);
+        }
+
+      gtk_style_context_add_provider (context, css_provider,
+                                      GTK_STYLE_PROVIDER_PRIORITY_USER);
     }
 
   if (GTK_WIDGET_REALIZED (widget))